/* The file is saved in UTF-8 codepage.
 * Check: «Stereotype», Section mark-§, Copyright-©, Alpha-α, Beta-β, Smile-☺
 */
package cz.pecinovsky.english.lootp._134_;


import cz.pecinovsky.english.lootp.manager.IControlled;
import cz.pecinovsky.english.lootp.manager.Painter;
import cz.pecinovsky.english.lootp.manager.Controller;


import cz.pecinovsky.english.lootp.manager.CanvasManager_Envelope.               CanvasManager;


import cz.pecinovsky.english.lootp._134_.IRotable_136_.IRotable;
import cz.pecinovsky.english.lootp._134_.Arrow_134_.Arrow;


//import cz.pecinovsky.english.lootp._134_.Vozidlo_A_137_.Vozidlo_A;
////////////////////////////////////////////////////////////////////////////////
//%%+  +++++ End of ignored starting test - place for imports +++++
//%I+
//import cz.pecinovsky.english.lootp.canvasmanager.IControlled;
//import cz.pecinovsky.english.lootp.canvasmanager.Painter;
//import cz.pecinovsky.english.lootp.canvasmanager.Controller;
//import cz.pecinovsky.english.lootp.canvasmanager.CanvasManager;
//%I-

import cz.pecinovsky.english.lootp.utility.IO;
import cz.pecinovsky.english.lootp.utility.Position;
import cz.pecinovsky.english.lootp.utility.Direction8;
//%X+ xxxxx Start of the ovejumped text with declaration of the envelope xxxxx
/*******************************************************************************
 *<pre>
 * Předchozí:   Není - toto_je_nově_definovaná_třída
 *              Ttt v projektu Ppp
 * Následující: Prozatím není
 *
 * Projekt  Ppp
 *   + Přidáno
 *   - Odebráno
 *   ~ Změněno
 *</pre>
 */
public class Vozidlo_A_137_
{    private Vozidlo_A_137_() {}   static
////////////////////////////////////////////////////////////////////////////////
//%X- ----- End of the ovejumped text with declaration of the envelope -----


/*******************************************************************************
 * Instance třídy {@code Vozidlo_A} představují "pojízdné" objekty,
 * které je možné ovládat z klávesnice.
 *
 * @author Rudolf PECINOVSKÝ
 * @version 6.03.2017 — 2010-11-08
 */
public class Vozidlo_A implements IControlled
{
//== CONSTANT CLASS ATTRIBUTES =================================================

    /** Canvas, na které se bude instance kreslit. */
    private static final CanvasManager CM = CanvasManager.getInstance();



//== VARIABLE CLASS ATTRIBUTES =================================================

    /** Rychlost pohybu, tj. o kolik bodů se objekt posune po jednom příkazu. */
    private int speed = CM.getStep();



//== STATIC CONSTRUCTOR (CLASS INITIALIZER, STATIC INICITALIZING BLOCK) ======== 
//== CONSTANT INSTANCE ATTRIBUTES ==============================================

    /** Dekorovaný objekt, který bude ovládán z klávesnice. */
    private final IRotable decorated;



//== VARIABLE INSTANCE ATTRIBUTES ==============================================
//== CLASS GETTERS AND SETTERS =================================================
//== OTHER NON-PRIVATE CLASS METHODS ===========================================

//##############################################################################
//== CONSTUCTORS AND FACTORY METHODS ===========================================

    /***************************************************************************
     * Obalí otočný objekt zadaný v parametru schopností býti ovládán
     * z klávesnice.
     *
     * @param ovládaný Dekorovaný objekt
     */
    public Vozidlo_A(IRotable ovládaný)
    {
        this.decorated = ovládaný;
    }



//== ABSTRACT METHODS ==========================================================
//== INSTANCE GETTERS AND SETTERS ==============================================
//== OTHER NON-PRIVATE INSTANCE METHODS ========================================

    /***************************************************************************
     * Reakce na stisk klávesy se šipkou vpravo.
     */
    @Override
    public void vpravo()
    {
        Direction8 direction = decorated.getDirection();
        decorated.setDirection(direction.rightFace());
    }


    /***************************************************************************
     * Reakce na stisk klávesy se šipkou vlevo.
     */
    @Override
    public void vlevo()
    {
        Direction8 direction = decorated.getDirection();
        decorated.setDirection(direction.leftFace());
    }


    /***************************************************************************
     * Reakce na stisk klávesy se šipkou vzhůru.
     */
    @Override
    public void vzhůru()
    {
        Position pozice = decorated.getPosition();
        Direction8  direction   = decorated.getDirection();
        pozice = direction.nextPosition(pozice, speed);
        decorated.setPosition(pozice);
    }


    /***************************************************************************
     * Reakce na stisk klávesy se šipkou dolů.
     */
    @Override
    public void dolů()
    {
    }


    /***************************************************************************
     * Reakce na stisk klávesy enter.
     */
    @Override
    public void enter()
    {
    }


    /***************************************************************************
     * Reakce na stisk mezerníku.
     */
    @Override
    public void mezera()
    {
    }


    /***************************************************************************
     * Reakce na stisk klávesy ESC, tj. na ukončení ovládání z klávesnice.
     */
    @Override
    public void konec()
    {

    }


    /***************************************************************************
     * Vrátí řetězec sloužící jako textový "podpis" instance
     * používaný především při ladění.
     *
     * @param painter Painter, které nakreslí instanci
     */
    @Override
    public void paint(Painter painter)
    {
        decorated.paint(painter);
    }


    /***************************************************************************
     * Vrací textovou reprezentaci (podpis) dané instance
     * používanou především k ladicím účelům.
     *
     * @return Požadovaná textová reprezentace
     */
    @Override
    public String toString()
    {
        return "Voziclo_A_(" + decorated.toString() + ")";
    }



//== PRIVATE AND AUXILIARY CLASS METHODS =======================================
//== PRIVATE AND AUXILIARY INSTANCE METHODS ====================================
//== EMBEDDED TYPES AND INNER CLASSES ==========================================
//== TESTING CLASSES AND METHODS ===============================================

    /***************************************************************************
     * Test method.
     */
    public static void test()
    {
        Arrow arrow  = new Arrow();
        Vozidlo_A va = new Vozidlo_A(arrow);
        Controller řadič  = new Controller(va);

        IO.inform("Až se projedeš, stiskni OK");
        System.exit(0);
    }
//    /** @param args Parametry příkazového řádku - nepoužívané. */
//    public static void main(String[] args)  {  test();  }
    }

//%%- ---- Start of the ovejumped text with closing of the envelope ----
////////////////////////////////////////////////////////////////////////////////
//== TESTING CLASSES AND METHODS ===============================================

    /***************************************************************************
     * Test method.
     */
    public static void test()
    {
        Arrow arrow  = new Arrow();
        Vozidlo_A va = new Vozidlo_A(arrow);
        Controller řadič  = new Controller(va);

        IO.inform("Až se projedeš, stiskni OK");
        System.exit(0);
    }
    /** @param args Parametry příkazového řádku - nepoužívané. */
    public static void main(String[] args)  {  test();  }
}
